파생 변수
IT 위키
더 많은 작업
- Derived Variable; 파생 변수
- 기존 변수에 특정 조건이나 함수를 적용해 새로 만든 변수
원본 변수만으로는 드러나지 않는 의미를 분석 목적에 맞게 만들어 내는 작업이다. 특성 공학의 핵심 기법이며, 모형 성능에 직접 영향을 준다. 만드는 사람의 판단이 들어가므로 논리적 타당성을 갖춰야 한다.
| 방법 | 설명 | 예 |
|---|---|---|
| 단위 변환 | 주어진 변수의 단위나 척도를 바꾼다 | 초 → 분, 일별 → 주별 |
| 표현형식 변환 | 단순한 표현 방식으로 바꾼다 | 성별 "남/여" → 0/1, 생년월일 → 나이 |
| 요약 통계량 변환 | 요약 통계량으로 새 변수를 만든다 | 고객별 평균 구매 금액, 누적 방문 수 |
| 정보 추출 | 변수 안에서 정보를 뽑아낸다 | 주민번호 → 성별, 날짜 → 요일·분기, 주소 → 시·도 |
| 변수 결합 | 여러 변수를 수식으로 결합한다 | 키·몸무게 → BMI, 매출 ÷ 방문 수 → 객단가 |
| 조건문 이용 | 조건에 따라 값을 부여한다 | 구매 금액 100만 원 이상이면 "VIP" |
| 구분 | 요약 변수 | 파생 변수 |
|---|---|---|
| 정의 | 수집된 정보를 분석 목적에 맞게 종합(집계)한 변수 | 특정 조건이나 함수로 의미를 부여한 변수 |
| 성격 | 객관적, 여러 모형에 재활용성이 높다 | 주관적일 수 있어 논리적 타당성이 필요하다 |
| 예 | 상품별 구매 금액, 기간별 구매 횟수, 단어 빈도 | 근무시간 구매 여부, 주 구매 매장, 구매 상품 다양성 |
import pandas as pd
df = pd.DataFrame({
"cust": ["A", "A", "B"],
"date": pd.to_datetime(["2025-03-01", "2025-03-08", "2025-03-02"]),
"amount": [120000, 900000, 30000],
"height_cm": [170, 170, 160],
"weight_kg": [65, 65, 50],
})
df["weekday"] = df["date"].dt.day_name() # 정보 추출
df["bmi"] = df["weight_kg"] / (df["height_cm"] / 100) ** 2 # 변수 결합
df["grade"] = (df["amount"] >= 1_000_000).map({True: "VIP", False: "일반"}) # 조건문
df["cust_mean"] = df.groupby("cust")["amount"].transform("mean") # 요약 통계량
- 목표 변수(정답) 정보를 담은 파생 변수를 만들면 데이터 누수(leakage)가 생겨 평가 성능이 부풀려진다
- 원본과 거의 같은 정보를 가진 파생 변수를 여러 개 넣으면 다중 공선성이 생길 수 있다
- 학습 데이터로 계산한 요약 통계량은 평가 데이터에도 같은 기준으로 적용해야 한다
- 파생 변수 생성 방법 6가지를 예시와 짝짓는 문제
- 요약 변수와 파생 변수의 구분(재활용성 vs 논리적 타당성)
- 실기 작업형에서 날짜 분해, 조건 변수, 그룹별 집계로 새 컬럼을 만드는 문제
- 파생 변수는 사용자가 특정 조건이나 함수로 만든 변수라 주관적일 수 있다. 그래서 논리적 타당성을 갖추어 만들어야 하고, 유의미한 특성이 객관적으로 반영되어야 한다.
- 파생 변수를 그 데이터셋을 대표하는 변수로 쓰는 것은 아니다. 분석 목적에 맞게 보탠 변수다.
- 시간 수집 시점, 연속형 변수의 구간화, 여러 필드의 시간 종속 데이터를 피봇해 만드는 방법이 있다.
- 교호작용으로 파생 변수를 만들 때는 독립변수끼리의 곱을 쓴다. 독립변수와 종속변수의 교호작용으로 만드는 것은 아니다.
- 결측값을 주변 값으로 채우는 것은 결측치 대치(imputation)다. 파생 변수 생성이 아니다.